package com.xm.aop;

import org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator;
import org.springframework.context.ApplicationContext;

/**
 * 时机：
 *   AOP代理在Bean初始化后（postProcessAfterInitialization）生成
 * 原理：
 *   通过AnnotationAwareAspectJAutoProxyCreator
 *   （BeanPostProcessor 实现类）动态创建代理对象，
 *   拦截方法调用并插入切面逻辑
 * 设计意义
 *   结构业务逻辑与横切关注（如日志、事务），
 *   通过无侵入方式增强 Bean 功能
 *   ---
 * 为什么选择在初始化后生成代理？
 *  1、依赖注入完成
 *      此时 Bean 的属性已填充完毕，确保代理对象能正确引用其他 Bean。
 *  2、初始化方法执行完毕
 *      代理需要基于完整的 Bean 状态（例如 @PostConstruct 可能修改了 Bean 的初始状态）。
 *  3、避免循环依赖问题
 *      Spring 三级缓存机制（早期对象引用）允许在代理生成前处理循环依赖。
 */
public class BeanPostProcessorAfter {
    public static void main(String[] args) {
//        AnnotationAwareAspectJAutoProxyCreator

//        ApplicationContext
    }
}
